package blue_bridge_cup_learning.整数划分;

// 满足 N!的末尾恰好有 K 个 0 的最小的 N 是多少?
// 如果这样的 N不存在输出−1。
// 先进行分析:
// 末尾有0说明需要计算10的个数,可是发现10可以由2*5,4*5得到
//都有5的这个因子,所以需要计算5的个数
// 0的个数等于N!中因子5的个数
public class 求阶乘 {
    public static void main(String[] args) {
        int zero_count = 4;
        int l = 1, r = Integer.MAX_VALUE;
        while (l < r) {
            int mid = l + r >> 1;
            if (get_zero_count(mid) >= zero_count) {
                r = mid;
            } else {
                l = mid + 1;
            }
        }

        System.out.println("符合条件的N!:" + l + "!");
    }

    public static int get_zero_count(int n) {
        int count = 0;
        while (n != 0) {
            count += n / 5;
            n /= 5;
        }
        return count;
    }
}
